(() => {
    // 接口 interface 
    /**
     *  1.对对象形状进行描述
     *  2.对类的一部分行为抽象
     */

    // 类类型接口，是对类一部分行为进行抽象
    // 类必须要实现接口中的所有属性和方法 && 抽象类：只需要实现抽象方法

    // 1.抽象类的公共属性和方法，做成一个接口
    interface ClockInterface {
        currentTime: Date;
        setTime(d: Date): void
    }
    class Clock implements ClockInterface {
        currentTime = new Date()
        setTime() { }
    }


    // 2.类可以实现多个接口
    interface Alarm {
        alert(): void
    }
    interface Light {
        lightColor: string
        lightOn(): void
        lightOff(): void
    }

    class Door {
        open() { console.log('开门'); }
    }

    // 继承Door类，实现Alarm接口
    class SafeDoor extends Door implements Alarm {
        alert() {
            console.log('报警');
        }
    }
    const safeDoor: Door = new SafeDoor()
    safeDoor.open()

    // 实现Alarm，Light接口
    class Car implements Alarm, Light {
        lightColor: 'red'
        alert() {
            console.log('车子报警');
        }
        lightOn() {
            console.log('车子开灯');
        }
        lightOff() {
            console.log('车子关灯');
        }
    }
    const benz = new Car()
    console.log(benz.lightColor);
    benz.alert()
    benz.lightOff()
    benz.lightOn()
})()